package main

import (
	"fmt"
	"goProject/gorm/db"
	"gorm.io/gorm"
)

func GetDB() *gorm.DB {
	return db.InitMySQL()
}

func main() {
	//GetSecondUser()
	//GetAllUsers()
	addCompanyUser()
}

func GetSecondUser() {
	var user db.User
	dbConn := GetDB()
	result := dbConn.Limit(1).Offset(1).Order("id asc").First(&user)
	if result.Error != nil {
		fmt.Println("查询第二条用户失败:", result.Error)
		return
	}
	fmt.Println("第二条用户：", user)
}

func GetAllUsers() {
	var users []db.User
	dbConn := GetDB()
	result := dbConn.Find(&users)
	if result.Error != nil {
		fmt.Println("查询所有用户失败:", result.Error)
		return
	}
	fmt.Println("所有用户：", users)
}

func addCompanyUser() {
	database := db.InitMySQL()

	/*
		多对一的创建顺序，先创建"一"的一方，再创建"多"的一方
	*/
	// 创建公司
	company := db.Company{Name: "腾讯"}
	database.Create(&company)

	// 创建用户并关联到公司
	user1 := db.User{Name: "张三", Email: "zhangsan@qq.com", CompanyID: company.ID}
	user2 := db.User{Name: "李四", Email: "lisi@qq.com", CompanyID: company.ID}
	database.Create(&user1)
	database.Create(&user2)

}

func GetCompanyUsers() {
	database := db.InitMySQL()
	// 查询用户及其公司信息
	var user db.User
	database.Preload("Company").First(&user, 1)
	fmt.Printf("用户: %s, 公司: %s\n", user.Name, user.Company.Name)

	// 查询公司及其所有用户
	var companyWithUsers db.Company
	database.Preload("Users").First(&companyWithUsers, 1)
	fmt.Printf("公司: %s, 用户数量: %d\n", companyWithUsers.Name, len(companyWithUsers.Users))
}
